import type { Settings as LayoutSettings } from '@ant-design/pro-layout';
import { SettingDrawer } from '@ant-design/pro-layout';
import { PageLoading } from '@ant-design/pro-layout';
import type { RunTimeLayoutConfig } from 'umi';
// import { message } from 'antd'
import { history } from 'umi';
import RightContent from '@/components/RightContent';
import Footer from '@/components/Footer';
import { currentUser as queryCurrentUser } from './services/ant-design-pro/api';
import defaultSettings from '../config/defaultSettings';
import { getFlag, getUserId } from './utils/cache';
import { message } from 'antd';

// const isDev = process.env.NODE_ENV === 'development';
const loginPath = '/user/login';

// 是否子应用
let isMicro = false;

/** 获取用户信息比较慢的时候会展示一个 loading */
export const initialStateConfig = {
    loading: isMicro ? null : <PageLoading />,
};

/**
 * @see  https://umijs.org/zh-CN/plugins/plugin-initial-state
 * */
export async function getInitialState(): Promise<{
    settings?: Partial<LayoutSettings>;
    currentUser?: API.CurrentUser;
    loading?: boolean;
    fetchUserInfo?: () => Promise<API.CurrentUser | undefined>;
}> {
    const fetchUserInfo = async () => {
        try {
            const guid: any = {
                guid: getUserId(),
            };
            const msg = await queryCurrentUser(guid);

            // const menu = msg.menu.filter((item: API.Menu) => item.url.includes('mall'))

            const auth = {};
            msg.auth.forEach((item: API.Menu) => {
                auth[item.url] = item;
            });

            return { ...msg, menu: auth, auth: undefined };
        } catch (error) {
            history.push(loginPath);
        }
        return undefined;
    };
    // 如果不是登录页面，执行
    if (history.location.pathname !== loginPath) {
        const currentUser = await fetchUserInfo();
        return {
            fetchUserInfo,
            currentUser,
            settings: defaultSettings,
        };
    }
    return {
        fetchUserInfo,
        settings: defaultSettings,
    };
}

// ProLayout 支持的api https://procomponents.ant.design/components/layout
export const layout: RunTimeLayoutConfig = ({ initialState, setInitialState }) => {
    const prop: any = {};
    if (isMicro) {
        // 如果是加载在主应用中,不展示菜单和头部
        prop.pure = true;
    }
    return {
        rightContentRender: () => <RightContent />,
        disableContentMargin: false,
        waterMarkProps: {
            content: initialState?.currentUser?.nick_name,
        },
        footerRender: () => <Footer />,
        onPageChange: () => {
            const { location } = history;
            // 如果没有登录，重定向到 login
            if (!initialState?.currentUser && location.pathname !== loginPath) {
                history.push(loginPath);
            }
        },
        menuHeaderRender: undefined,
        // 自定义 403 页面
        // unAccessible: <div>unAccessible</div>,
        // 增加一个 loading 的状态
        childrenRender: (children, props) => {
            // if (initialState?.loading) return <PageLoading />;
            return (
                <>
                    {children}
                    {!props.location?.pathname?.includes('/login') && (
                        <SettingDrawer
                            disableUrlParams
                            enableDarkTheme
                            settings={initialState?.settings}
                            onSettingChange={(settings) => {
                                setInitialState((preInitialState: any) => ({
                                    ...preInitialState,
                                    settings,
                                }));
                            }}
                        />
                    )}
                </>
            );
        },
        ...prop,
        ...initialState?.settings,
    };
};

export const qiankun = {
    // 应用加载之前
    async bootstrap(props: any) {
        console.log('app1 bootstrap', props);
        if (props) {
            isMicro = props.isMicro || true;
        }
    },
    // 应用 render 之前触发
    async mount(props: any) {
        console.log('app1 mount', props);
    },
    // 应用卸载之后触发
    async unmount(props: any) {
        console.log('app1 unmount', props);
    },
};
